博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django+xadmin打造在线教育平台(五)
阅读量:4711 次
发布时间:2019-06-10

本文共 9940 字,大约阅读时间需要 33 分钟。

 

代码

八、课程详情页功能的实现

8.1.课程列表

 (1)配置urls

MxOnline/urls中

path("course/", include('course.urls', namespace="course")),

course里面新建urls.py

# course/urls.pyfrom django.urls import path,re_pathfrom .views import CourseListView# 要写上app的名字app_name = "course"urlpatterns = [    path('list/',CourseListView.as_view(),name='course_list'),]

把course-list.html拷贝到templates目录下

from django.shortcuts import renderfrom django.views.generic import Viewclass CourseListView(View):    def get(self, request):        return render(request, "course-list.html")

 

(2)course-list.html继承base.html

修改title,修改bread里面,content里面放course-list独有的

 
course-list.html

然后去后台添加十门课程

(3)列表展示

views.py

# course/views.pyfrom django.shortcuts import renderfrom django.views.generic import Viewfrom .models import Courseclass CourseListView(View):    def get(self, request):        all_courses = Course.objects.all()        return render(request, "course-list.html",{'all_courses':all_courses})

course-list.html

{% for course in all_course %}

{
{ course.name }}

时长:{
{ course.learn_times }}
学习人数:{
{ course.students }}  
来自{
{ course.course_org.name }}
{
{ course.fav_nums }}
{% endfor %}

8.2.分页

try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        p = Paginator(all_courses,2 , request=request)        courses = p.page(page)
    {% if all_courses.has_previous %}
  • 上一页
  • {% endif %} {% for page in all_courses.pages %} {% if page %} {% ifequal page all_courses.number %}
  • {
    { page }}
  • {% else %}
  • {
    { page }}
  • {% endifequal %} {% else %}
  • ...
  • {% endif %} {% endfor %} {% if all_courses.has_next %}
  • 下一页
  • {% endif %}

8.3.排序

class CourseListView(View):    def get(self, request):        all_courses = Course.objects.all().order_by('-add_time')        # 热门课程推荐        hot_courses = Course.objects.all().order_by('-click_nums')[:3]        # 排序        sort = request.GET.get('sort', "")        if sort:            if sort == "students":                all_courses = all_courses.order_by("-students")            elif sort == "hot":                all_courses = all_courses.order_by("-click_nums")        # 分页        try:            page = request.GET.get('page', 1)        except PageNotAnInteger:            page = 1        p = Paginator(all_courses,2 , request=request)        courses = p.page(page)        return render(request, "course-list.html", {            "all_courses":courses,            'sort': sort,            'hot_courses':hot_courses,        })
热门课程推荐
{% for hot_course in hot_courses %}

{
{ hot_course.name }}

难度:{
{ hot_course.get_degree_display }}
{% endfor %}
 
course-list.html
 
views.py

 

8.4.课程详情

course-detail.html复制进来

 

 (1)url配置

re_path('course/(?P
\d+)/', CourseDetailView.as_view(), name="course_detail"),
class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        return  render(request, "course-detail.html", {        })

 

 在course-list.html中添加链接到详情

 

 (2)views

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        return  render(request, "course-detail.html", {            'course':course,        })

(3)Course model增加

  • 一个category字段
  • 一个获取章节数的方法
  • 一个获取这么课程的学习用户方法

 

 
Course

(4)course-detail.html中课程详情信息显示

{
{ course.name }}

{
{ course.desc }}
难度:{
{ course.get_degree_display }}
学习人数:{
{ course.students }}
  • 时     长:{
    { course.learn_times }}
  • 章 节 数:{
    { course.get_zj_nums }}
  • 课程类别:{
    { course.category }}
  • 学习用户: {% for user_course in course.get_learn_users %} {% endfor %}

 

 显示课程详情

 

 

8.5.授课机构 

 (1)CourseOrg model添加一个获取教师数的方法

def get_teacher_nums(self):        #获取机构的教师数        return self.teacher_set.all().count()
 
CourseOrg

(2)授课机构显示

授课机构

世界名校,课程权威

{
{ course.course_org.name }}

已收藏
  • 课  程  数:      {
    { course.course_org.course_nums }}
  • 教  师  数:      {
    { course.course_org.get_teacher_nums }}
  • 所在地区:  {
    { course.course_org.address }}
  • 认       证 :   

 

 

8.6.相关课程推荐

(1)给“Course” model添加一个“课程标签”字段

tag = models.CharField('课程标签',default='',max_length=10)
 
Course

 (2)views

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        # 课程标签        # 通过当前标签,查找数据库中的课程        tag = course.tag        if tag:            # 需要从1开始不然会推荐自己            relate_courses = Course.objects.filter(tag=tag)[:3]        else:            relate_courses = []        return  render(request, "course-detail.html", {            'course':course,            'relate_courses':relate_courses,        })

(3)前端

相关课程推荐
{% for relate_course in relate_courses %}

{ { relate_course.name }}

学习时长:{ { relate_course.learn_times }}
{% endfor %}

 

 

 

8.7.课程收藏和机构收藏

  {% block custom_js %}{% endblock %},放到最下面的位置,因为是js代码,要最后加载

后端判断当前收藏转态

class CourseDetailView(View):    '''课程详情'''    def get(self, request, course_id):        course = Course.objects.get(id=int(course_id))        # 课程的点击数加1        course.click_nums += 1        course.save()        # 课程标签        # 通过当前标签,查找数据库中的课程        has_fav_course = False        has_fav_org = False        # 必须是用户已登录我们才需要判断。        if request.user.is_authenticated:            if UserFavorite.objects.filter(user=request.user, fav_id=course.id, fav_type=1):                has_fav_course = True            if UserFavorite.objects.filter(user=request.user, fav_id=course.course_org.id, fav_type=2):                has_fav_org = True        tag = course.tag        if tag:            # 需要从1开始不然会推荐自己            relate_courses = Course.objects.filter(tag=tag)[:2]        else:            relate_courses = []        return  render(request, "course-detail.html", {            'course':course,            'relate_courses':relate_courses,            "has_fav_course": has_fav_course,            "has_fav_org": has_fav_org,        })

course-detail.html中添加Ajax

{% block custom_js %}    {% endblock %}

转载于:https://www.cnblogs.com/syq666/p/8715569.html

你可能感兴趣的文章
关于下拉框在页面加载时候选中值得问题
查看>>
SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-002-本章的源代码...
查看>>
怎么教软件工程课的看法
查看>>
Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
查看>>
获取两个时间之间的天数
查看>>
springboot 学习之路 2(注解介绍)
查看>>
vue项目引入自定义.css的样式文件
查看>>
RabbitMQ 将监听的IP从localhost修改为指定IP
查看>>
LeetCode-Trapping Rain Water-下雨积水-单调队列应用
查看>>
.Net 程序在自定义位置查找托管/非托管 dll 的几种方法
查看>>
ADO.net简单增删改查
查看>>
申请苹果开发者账号
查看>>
mysql的表锁和行锁,排他锁和共享锁。
查看>>
安装cartographer
查看>>
Java语法训练-打印各种三角形
查看>>
spring-dao.xml配置问题(一)
查看>>
SQLServer语句大使
查看>>
The Run-Time Constant Pool The Constant Pool
查看>>
剑指Offer-用两个栈实现队列
查看>>
Picker 移动端下拉框
查看>>